#ifndef OPENGLWRAPPER_GLApplication_H_
#define OPENGLWRAPPER_GLApplication_H_

#include "OpenGLPrerequisites.h"

namespace OpenGLWrapper
{
	//
	// Class that represent a Gl application
	//
	class GLApplication
	{
	protected:

		int _currentWidth;
		int _currentHeight;

		float _translateX;
		float _translateY;
		float _translateZ;
		float _scaleValue;

		float _rotationX;
		float _rotationY;
		float _rotationZ;

		bool _mousePanning;
		int _startXPan;
		int _startYPan;
		double _defaultFontSize;
		double _fontSize;

	public:

		//
		// Default constructor
		//
		GLApplication();

		//
		// Destructor
		//
		virtual ~GLApplication();

		//
		// Initialize the application
		//
		bool virtual Init();

		//
		// Prepare the application
		//
		void virtual Prepare(float dt);

		//
		// Render the application
		//
		void virtual Render();

		//
		// Shutdown the appplication
		//
		void virtual Shutdown();

		// 
		// Called when the application window is resized
		//
		void virtual OnResize(int width, int height);

		//
		// Called when the key down
		//
		void virtual OnKeyDown(BYTE key);

		//
		// Called when the mouse is down
		//
		void virtual OnMouseDown(int button, int x, int y);

		//
		// Called when the mouse is move
		//
		void virtual OnMouseMove(int x, int y);

		//
		// Called when the mouse is up
		//
		void virtual OnMouseUp(int button, int x, int y);

		//
		// Called when the mouse wheel is rolled
		//
		void virtual OnMouseWheel(int distance, int x, int y);
	};
}

#endif

